#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
Classe que determina quantos e quais HTML tokens
sao utilizados atraves de um determinado URL
@author: Luís Fonte nº6043
Data de Criação 30/11/2011
'''

from urllib2 import URLError
from urllib2 import HTTPError
import urllib2
from BeautifulSoup import BeautifulSoup


class httpTokenSearch():
       
        try:
            webSite = "http://www.metallica.com"
            request = urllib2.Request(webSite)    

            # Abre a conexão
            # Adaptado de: http://docs.python.org/library/urllib.html
            internetFile = urllib2.urlopen(request)

            # Efetua a leitura do conteúdo da página.
            content = internetFile.read()
            internetFile.close()
            
            # Processamento dos dados da pagina
            fileData = BeautifulSoup(content)

            # Lista com as instrucoes que recolhem os dados sobre os tokens atraves do BSoup
            # Consultado: http://www.crummy.com/software/BeautifulSoup/documentation.html#The%20basic%20find%20method:%20findAll(name,%20attrs,%20recursive,%20text,%20limit,%20**kwargs)

            tokens_list = [ fileData.findAll( {'h1' : True}), fileData.findAll( {'h2' : True}), fileData.findAll( {'h3' : True}),
                            fileData.findAll( {'div' : True}), fileData.findAll( {'p' : True}),
                            fileData.findAll( {'ul' : True}), fileData.findAll( {'ol' : True}) ]
            
            # Expressoes dos tokens que identificam a conlusao das instrucoes, serve para fazer a contagem
            tokens_end_expression = [ '</h1>', '</h2>', '</h3>', '</div>', '</p>', '</ul>', '</ol>']

            tokens_to_print = [ 'H1', 'H2', 'H3', 'DIV', 'P', 'UL', 'OL' ]

            print ("Number of times HTTP tokens used on " + webSite + "\n")

            # Recolhe os scripts do BSoup, faz a contagem e o print para a shell
            for x in range (len(tokens_list)): 
                    soup_script = tokens_list[x]
                    string_soup = str(soup_script)                            #Passa o script para string
                    test = string_soup.count(tokens_end_expression[x])
                    print "%-15s %4d" % ("Number of " + tokens_to_print[x], test)
                    pass
                            
            # Mensagens de erro
        except HTTPError, e:
            print("Ocorreu um erro ao requisitar o conteudo !\n")
            print("Cod.: ", e.code)
    
        except URLError, e:
            print("URL invalido!\n")
            print("Mensagem: ", e.reason)
            pass
          
